import type { PageParam, PageResult } from '@vben/request';

import { requestClient } from '#/api/request';

export namespace AiTrainingDatasetMetaApi {
  /** 数据集信息 */
  export interface TrainingDatasetMeta {
    id: number; // 数据集主表id
    datasetName?: string; // 数据集名称
    categoryId?: number; // 分类id
    source: string; // 数据来源，如：manual/auto/imported
    totalSamples: number; // 数据总数
    description: string; // 数据集介绍
    versionNum: string; // 版本号
    status: number; // 状态:draft-草稿, active-活跃, archived-归档, deprecated-弃用
    sort: number; // 排序
    language: string; // 语言
    taskType: string; // 阶段类型：sft-监督微调 pretrain-预训练 dpo-直接偏好优化 kto-Kullback-Leibler偏好调整 ppo-近端策略优化
    metadata: string; // 扩展元数据
    filePath: string; // 源文件存放路径
    dataFormat: string; // 数据格式：alpaca, sharegpt, llama2, custom
    outJsonPath: string; // json文件输出路径
    areaCode: number; // 行政区划编码
    orgId: number; // 所属组织id
    qualityScore: number; // 质量评分0-5
    isPublic: number; // 是否公开 0否 1是
    splitType: string; // 数据集划分类型：train/valid/test
  }
}

/** 查询数据集分页 */
export function getTrainingDatasetMetaPage(
  data: PageParam,
  desensitize: boolean,
  encrypt: boolean,
) {
  return requestClient.post<
    PageResult<AiTrainingDatasetMetaApi.TrainingDatasetMeta>
  >('/ai/training-dataset-meta/page', data, { desensitize, encrypt });
}

/** 查询数据集详情 */
export function getTrainingDatasetMeta(id: number) {
  return requestClient.get<AiTrainingDatasetMetaApi.TrainingDatasetMeta>(
    `/ai/training-dataset-meta/get?id=${id}`,
  );
}

/** 新增数据集 */
export function createTrainingDatasetMeta(
  data: AiTrainingDatasetMetaApi.TrainingDatasetMeta,
) {
  return requestClient.post('/ai/training-dataset-meta/create', data);
}

/** 修改数据集 */
export function updateTrainingDatasetMeta(
  data: AiTrainingDatasetMetaApi.TrainingDatasetMeta,
) {
  return requestClient.put('/ai/training-dataset-meta/update', data);
}

/** 删除数据集 */
export function deleteTrainingDatasetMeta(id: number) {
  return requestClient.delete(`/ai/training-dataset-meta/delete?id=${id}`);
}

/** 批量删除数据集 */
export function deleteTrainingDatasetMetaList(ids: number[]) {
  return requestClient.delete(
    `/ai/training-dataset-meta/delete-list?ids=${ids.join(',')}`,
  );
}

/** 导出数据集 */
export function exportTrainingDatasetMeta(params: any) {
  return requestClient.download('/ai/training-dataset-meta/export-excel', {
    params,
  });
}
/** 快速创建版本 */
export function createVersionFast(
  datasetId: number,
  versionNum: string,
  authStatus: string,
) {
  return requestClient.get('/ai/training-dataset-meta/create-version-fast', {
    params: {
      datasetId,
      versionNum,
      authStatus,
    },
  });
}
/** 切换版本 */
export function switchVersion(
  datasetId: number,
  versionId: string,
  status: string,
) {
  return requestClient.get('/ai/training-dataset-meta/switch-version', {
    params: {
      datasetId,
      versionId,
      status,
    },
  });
}
/** 生成训练的json文件 */
export function generateJsonFile(
  datasetId: number,
  versionId: number,
  versionNum: string,
  splitType: string,
) {
  return requestClient.get('/ai/training-dataset-meta/generate-json-file', {
    params: {
      datasetId,
      versionId,
      versionNum,
      splitType,
    },
  });
}
/** 下载训练的json文件 */
export function downloadJsonFile(
  datasetId: number,
  versionId: number,
  versionNum: string,
  splitType: string,
) {
  return requestClient.download('/ai/training-dataset-meta/download-json', {
    params: {
      datasetId,
      versionId,
      versionNum,
      splitType,
    },
  });
}
